package h1.sismetro.gui;

import h1.sismetro.classesbasicas.Dispositivo;
import h1.sismetro.classesbasicas.Ferramenta;
import h1.sismetro.classesbasicas.Funcionario;
import h1.sismetro.classesbasicas.Local;
import h1.sismetro.classesbasicas.Manutencao;
import h1.sismetro.classesbasicas.Peca;
import h1.sismetro.classesbasicas.Usuario;
import h1.sismetro.exceptions.AcessoAoBancoException;
import h1.sismetro.exceptions.ConexaoComBancoException;
import h1.sismetro.exceptions.DispositivoJaCadastradoException;
import h1.sismetro.exceptions.DispositivoNaoEncontradoException;
import h1.sismetro.exceptions.FerramentaJaCadastradaException;
import h1.sismetro.exceptions.FerramentaNaoEncontradaException;
import h1.sismetro.exceptions.FuncionarioJaCadastradoException;
import h1.sismetro.exceptions.FuncionarioNaoEncontradoException;
import h1.sismetro.exceptions.LocalJaCadastradoException;
import h1.sismetro.exceptions.LocalNaoEncontradoException;
import h1.sismetro.exceptions.NenhumDispositivoCadastradoException;
import h1.sismetro.exceptions.NenhumFuncionarioCadastradoException;
import h1.sismetro.exceptions.NenhumLocalCadastradoException;
import h1.sismetro.exceptions.NenhumUsuarioCadastradoException;
import h1.sismetro.exceptions.NenhumaFerramentaCadastradaException;
import h1.sismetro.exceptions.NenhumaPecaCadastradaException;
import h1.sismetro.exceptions.PecaJaCadastradaException;
import h1.sismetro.exceptions.PecaNaoEncontradaException;
import h1.sismetro.exceptions.UsuarioJaCadastradoException;
import h1.sismetro.exceptions.UsuarioNaoEncontradoException;

import java.sql.SQLException;
import java.util.List;
/**
 * 
 * @author Paulo
 * @version 1.0
 *
 */
public interface IFachada {
	//FERRAMENTA
	public void cadastrar(Ferramenta novaFerramenta) throws ConexaoComBancoException, AcessoAoBancoException, FerramentaJaCadastradaException;
	public void alterar(Ferramenta novaFerramenta) throws ConexaoComBancoException, AcessoAoBancoException, FerramentaNaoEncontradaException;
	public void excluirFerramenta(int codigo) throws ConexaoComBancoException, AcessoAoBancoException, FerramentaNaoEncontradaException;
	public boolean existeFerramenta(int codigo) throws ConexaoComBancoException, AcessoAoBancoException;
	public Ferramenta recuperarFerramenta(int codigo) throws ConexaoComBancoException, AcessoAoBancoException, FerramentaNaoEncontradaException;
	public List<Ferramenta> imprimirFerramentas() throws ConexaoComBancoException, AcessoAoBancoException, NenhumaFerramentaCadastradaException;
	public int obterCodigoFerramenta() throws ConexaoComBancoException, AcessoAoBancoException;
	
	//PECA
	public void cadastrar(Peca novaPeca) throws PecaJaCadastradaException, ConexaoComBancoException, AcessoAoBancoException ;
	public void alterar(Peca novaPeca) throws PecaNaoEncontradaException, ConexaoComBancoException, AcessoAoBancoException ;
	public void excluirPeca(int codigo) throws PecaNaoEncontradaException, ConexaoComBancoException, AcessoAoBancoException ;
	public boolean existePeca(int codigo) throws ConexaoComBancoException, AcessoAoBancoException ;
	public Peca recuperarPeca(int codigo) throws PecaNaoEncontradaException, ConexaoComBancoException, AcessoAoBancoException ;
	public List<Peca> imprimirPecas() throws NenhumaPecaCadastradaException, ConexaoComBancoException, AcessoAoBancoException ;
	public int obterCodigoPeca() throws ConexaoComBancoException, AcessoAoBancoException;
	
	//FUNCIONARIO
	public void cadastrar(Funcionario novoFuncionario)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, FuncionarioJaCadastradoException;
	public void alterar(Funcionario novoFuncionario)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, FuncionarioNaoEncontradoException;
	public void excluirFuncionario(int matricula)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, FuncionarioNaoEncontradoException;
	public boolean existeFuncionario(int matricula)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException;
	public Funcionario recuperarFuncionario(int matricula)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, FuncionarioNaoEncontradoException;
	public List<Funcionario> imprimirFuncionarios() throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, NenhumFuncionarioCadastradoException;
	public int obterCodigoFuncionario() throws ConexaoComBancoException, AcessoAoBancoException;

	//DISPOSITIVO
	public void cadastrar(Dispositivo novoDispositivo) throws DispositivoJaCadastradoException, ConexaoComBancoException, AcessoAoBancoException;
	public void alterar(Dispositivo novoDispositivo) throws DispositivoNaoEncontradoException, ConexaoComBancoException, AcessoAoBancoException;
	public void excluirDispositivo(String identificador) throws DispositivoNaoEncontradoException, ConexaoComBancoException, AcessoAoBancoException;
	public boolean existeDispositivo(String identificador) throws ConexaoComBancoException, AcessoAoBancoException;
	public Dispositivo recuperarDispositivo(String identificador) throws ConexaoComBancoException, AcessoAoBancoException, DispositivoNaoEncontradoException;
	public List<Dispositivo> imprimirDispositivo() throws ConexaoComBancoException, AcessoAoBancoException, NenhumDispositivoCadastradoException;
	
	//LOCAL
	public void cadastrar(Local novoLocal)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, LocalJaCadastradoException;
	public void alterar(Local novoLocal)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, LocalNaoEncontradoException;
	public void excluirLocal(String identificador)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, LocalNaoEncontradoException;
	public boolean existeLocal(String identificador)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException;
	public Local recuperarLocal(String identificador)throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, LocalNaoEncontradoException;
	public List<Local> imprimirLocais() throws SQLException, ClassNotFoundException, AcessoAoBancoException, ConexaoComBancoException, NenhumLocalCadastradoException;
	
	//MANUTENCAO
	public void cadastrar(Manutencao novaManutencao);
	public void alterar(Manutencao novaManutencao);
	public void excluirManutencao(int numero);
	public boolean existeManutencao(int numero);
	public Manutencao recuperarManutencao(int numero);
	public List<Manutencao> imprimirManutencoes();
	
	//USUARIO
	public void cadastrar(Usuario novoUsuario) throws AcessoAoBancoException, ConexaoComBancoException, UsuarioJaCadastradoException ;
	public boolean existeUsuario(int login) throws AcessoAoBancoException, ConexaoComBancoException ;
	public boolean existeUsuario(String matricula) throws AcessoAoBancoException, ConexaoComBancoException;
	public void alterar(Usuario novoUsuario) throws AcessoAoBancoException, ConexaoComBancoException, UsuarioNaoEncontradoException;
	public void excluirUsuario(int login) throws AcessoAoBancoException, ConexaoComBancoException, UsuarioNaoEncontradoException ;
	public Usuario recuperarUsuario(int login) throws AcessoAoBancoException, ConexaoComBancoException, UsuarioNaoEncontradoException;
	public Usuario buscarPorLogon(int login, String senha) throws AcessoAoBancoException, ConexaoComBancoException, NenhumUsuarioCadastradoException;
}
